gobotを使ってGo言語でIntel Edisonを動かす
はじめに
弊社でのIntel Edison環境の開発はIntel XDK IoT Editionを使うことが多いですが、色々調べていたところgobotというものを存在を知りました。
gobotはGo言語で書かれたIoTやロボティクス用のフレームワークです。現時点で15種類のプラットフォームをサポートしています。
- ARDrone
- Arduino
- Beaglebone Black
- Digispark
- Intel Edison
- Joystick
- Leap Motion
- Mavlink
- MQTT
- Neurosky
- OpenCV
- Pebble
- Raspberry Pi
- Spark
- Sphero
つまり、Intel Edisonでの開発にあたって、Arduino言語やIntel XDK+node.jsでは無く、Go言語で書けちゃうということですね。
やってみた
それではGetting Startedに従って、gobotでIntel Edisonの開発をやってみます。
Gobotをインストールする
一般的なGo言語の開発環境の設定は終わっている(Go言語がセットアップされ、GOROOTやGOPATHは設定済み)ものとします。ちなみに私の環境では以下のようになっています。
GOROOT=/usr/local/go GOPATH=/Users/smokeymonkey/go
以下のコマンドを実行し、gobotをインストールします。
$ go get github.com/hybridgroup/gobot && go install github.com/hybridgroup/gobot/platforms/intel-iot/edison
Intel Edison用のクロスコンパイル設定を行います。
$ cd $GOROOT/src $ sudo GOOS=linux GOARCH=386 ./make.bash --no-clean Installed Go for linux/386 in /usr/local/go Installed commands in /usr/local/go/bin
サンプルプログラムを実行してみる
gobotのディレクトリに移動し、サンプルプログラムをbuildしてみます。
$ cd /Users/smokeymonkey/go/src/github.com/hybridgroup/gobot $ GOARCH=386 GOOS=linux go build examples/edison_blink.go $ ls -alF edison_blink -rwxr-xr-x 1 smokeymonkey smokeymonkey 3129664 1 20 10:28 edison_blink*
buildで作成された実行バイナリファイルをscpでIntel Edisonに送り込みます。
$ scp edison_blink [email protected]:/home/root/
Intel Edisonにコンソールログインし、バイナリファイルを実行します。
~# cd /home/root ~# ls edison_blink otp.bin ~# ./edison_blink 2015/01/20 01:31:03 Initializing Robot blinkBot ... 2015/01/20 01:31:03 Initializing connections... 2015/01/20 01:31:03 Initializing connection edison ... 2015/01/20 01:31:03 Initializing devices... 2015/01/20 01:31:03 Initializing device led ... 2015/01/20 01:31:03 Starting Robot blinkBot ... 2015/01/20 01:31:03 Starting connections... 2015/01/20 01:31:03 Starting connection edison... 2015/01/20 01:31:03 Starting devices... 2015/01/20 01:31:03 Starting device led on pin 13... 2015/01/20 01:31:03 Starting work...
すると、Intel Edison Board for Aduinoの基盤上のLEDが光ります。
Gobotでアナログセンサーを使ってみる
これだけじゃつまらないので、目に見えて動くものを作ってみます。今回はGroveスターターキットに入っている光センサとLEDソケットを使って、光センサに合わせてLEDの光が増減する仕組みにしてみます。ちょっと分かりづらいと思いますが、光センサをGroveベースシールドのA0に、LEDソケットをD3に接続しています。
作成したソースコードはこんな感じ。Analog Sensorのサンプルコードを参考にしています。
package main import ( "fmt" "github.com/hybridgroup/gobot" "github.com/hybridgroup/gobot/platforms/gpio" "github.com/hybridgroup/gobot/platforms/intel-iot/edison" ) func main() { gbot := gobot.NewGobot() e := edison.NewEdisonAdaptor("edison") sensor := gpio.NewAnalogSensorDriver(e, "sensor", "0") led := gpio.NewLedDriver(e, "led", "3") work := func() { gobot.On(sensor.Event("data"), func(data interface{}) { brightness := uint8( gobot.ToScale(gobot.FromScale(float64(data.(int)), 0, 4096), 0, 255), ) fmt.Println("sensor", data) fmt.Println("brightness", brightness) led.Brightness(brightness) }) } robot := gobot.NewRobot("sensorBot", []gobot.Connection{e}, []gobot.Device{sensor, led}, work, ) gbot.AddRobot(robot) gbot.Start() }
コンパイルし、実行ファイルをIntel EdisonにSCPで送り込みます。
$ GOARCH=386 GOOS=linux go build light_sensor.go $ ls -alF light_sensor -rwxr-xr-x 1 smokeymonkey smokeymonkey 3181248 1 20 10:58 light_sensor* $ scp light_sensor [email protected]:/home/root/
そしてIntel Edison上で実行します。
~# cd /home/root ~# ./light_sensor
すると、光センサに合わせてLEDの光が増減します!
さいごに
gobot、なかなか便利ではあるのですが、LCD用のドライバがまだ無かったりするので、もうちょっと対応デバイスが増えると良いなぁと思います。今後が楽しみです!